//从摄像头捕获视频, 推送视频帧到rtmp服务器
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;

public class RTMPSender {
    public static void main(String[] args) {
        String rtmpUrl = "rtmp://localhost/live/stream"; // RTMP 服务器地址
        int width = 1280; // 视频宽度
        int height = 720; // 视频高度
        int frameRate = 30; // 帧率

        try (OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0); // 从摄像头捕获视频
             FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpUrl, width, height)) {

            // 初始化 FrameGrabber
            grabber.setImageWidth(width);
            grabber.setImageHeight(height);
            grabber.start();

            // 初始化 FrameRecorder
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // 使用 H.264 编码
            recorder.setFormat("flv"); // RTMP 使用 FLV 格式
            recorder.setFrameRate(frameRate);
            recorder.start();

            System.out.println("Started streaming to " + rtmpUrl);

            Frame frame;
            while ((frame = grabber.grab()) != null) { // 捕获视频帧
                recorder.record(frame); // 推送视频帧到 RTMP 服务器
            }
        } catch (FrameGrabber.Exception | FFmpegFrameRecorder.Exception e) {
            e.printStackTrace();
        }
    }
}